socketserver 模块 -> 解决tcp协议在socket的多个客户端不能同时对服务端进行通讯的问题
1. 固定写法
# server.py
import socketserver
class Myserver(socketserver.BaseRequestHandler): # 继承socketserver中的BaseRequestHandler类
def handle(self):
# 在 handle 方法进行数据的收发
# self.request 就相当于 socket 中的 conn
msg = self.request.recv(1024).decode('utf-8')
print(msg)
self.request.send(bytes('你好', encoding='utf-8'))
if __name__ == '__main__':
server = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), Myserver) # 实例化一个server对象
server.allow_reuse_address = True # 允许服务端重用地址
server.serve_forever() # 让server永远运行下去,除非强制停止程序
2. 仿qq -> 实现多个客户端和服务端进行通讯
# server.py
import socketserver
class Myserver(socketserver.BaseRequestHandler): # 继承socketserver中的BaseRequestHandler类
def handle(self):
# 在 handle 方法进行数据的收发
# self.request 就相当于 socket 中的 conn
while True:
msg = self.request.recv(1024).decode('utf-8')
print(msg)
if '再见' in msg:
self.request.send(bytes('再见', encoding='utf-8'))
break
info = input('%s>>>' % msg[:4])
self.request.send(bytes(info, encoding='utf-8'))
if __name__ == '__main__':
server = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), Myserver) # 实例化一个server对象
server.allow_reuse_address = True # 允许服务端重用地址
server.serve_forever() # 让server永远运行下去,除非强制停止程序
# client1.py
import socket
sk = socket.socket()
sk.connect(('127.0.0.1', 8080))
while True:
info = input('请输入向服务端发送的消息:')
sk.send(bytes('客户端1:' + info, encoding='utf-8'))
msg = sk.recv(1024).decode('utf-8')
print(msg)
if msg == '再见':
sk.send(bytes('客户端1:再见', encoding='utf-8'))
break
sk.close()
# client2.py
import socket
sk = socket.socket()
sk.connect(('127.0.0.1', 8080))
while True:
info = input('请输入向服务端发送的消息:')
sk.send(bytes('客户端2:' + info, encoding='utf-8'))
msg = sk.recv(1024).decode('utf-8')
print(msg)
if msg == '再见':
sk.send(bytes('客户端1:再见', encoding='utf-8'))
break
sk.close()